知识点名称:Canvas

编号: K8-2

前驱知识点编号:K8-1

作者:

讲义内容:

8.2.1 Canvas类

在现实生活中的绘图,需要“纸”和“笔”,同样的Android开发中基于Canvas的绘图也有“纸”和“笔”的概念,即Canvas类和Paint类。

Canvas用一个虚拟的平面来工作,以便把图形绘制在实际的表面上---它持有所有的用draw开头的方法调用。通过Canvas对象,实际上是执行一个底层的位图绘制处理,这个位图被放置到窗口中。

在onDraw()回调方法的绘制事件中,会提供一个Canvas对象,并且只需要把要绘制的内容交给Canvas对象就可以了。在处理SurfaceView对象时,还可以从SurfaceHolder.lockCanvas()方法来获取一个Canvas对象。

如果需要创建一个新的Canvas对象,那么就必须在实际执行绘制处理的Canvas对象上定义Bitmap对象。对于Canvas对象来说,这个Bitmap对象是始终必须的,应该像以下示例这样建立一个新的Canvas对象:

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);

现在就可以在被定义的Bitmap对象上绘图了。在Canvas对象上绘制图形之后,能够用Canvas.drawBitmap(Bitmap, …)的一个方法,把该Bitmap对象绘制到另一个Canvas对象中。

Canvas类的方法主要用于绘制各类图元,包括基本形状的绘制:即以draw开头的各类方法,包括点、线、矩形、椭圆、圆弧、圆等,图片的绘制,文本的绘制,路径的绘制及各类画布操作,包括画布的裁剪、变换及快照等操作。

可以进行绘制调用的Canvas、拥有像素的Bitmap、图元(比如:Rect, Path, Text, Bitmap)、描述风格与颜色的Paint。

8.2.2 Bitmap类

Bitmap是一个final类,因此不能被继承。Bitmap只有一个构造方法,且该构造方法是没有任何访问权限修饰符修饰,也就是说该构造方法是friendly,但是谷歌称Bitmap的构造方法是private(私有的),感觉有点不严谨。不管怎样,一般情况下,我们不能通过构造方法直接新建一个Bitmap对象。

Bitmap是Android系统中的图像处理中最重要类之一。Bitmap可以获取图像文件信息,对图像进行剪切、旋转、缩放,压缩等操作,并可以以指定格式保存图像文件。

8.2.3 Paint类

Paint拥有绘制几何,文本,位图的风格与颜色信息。

  • setARGB(int a, int r, int g, int b):设置画笔颜色
  • setAntiAlias(boolean aa):设置是否抗锯齿
  • setColor(int color):设置画笔颜色
  • setAlpha(int a):设置画笔透明度
  • setTextSize(float textSize):设置字体大小
  • setUnderlineText(boolean underlineText):设置文本带有下划线效果
  • setStrikeThruText(boolean strikeThruText):设置文本带删除线效果
  • setTextSkewX(float skewX):设置文本倾斜度
  • setTextScaleX(float scaleX):设置文本缩放大小
  • setTextAlign(Paint.Align align):设置文本对齐方式
  • setTypeface(Typeface typeface):设置字体
  • setStyle(Paint.Style style):设置画笔样式,画笔样式有三种

Paint.Style.FILL:默认值,用这种风格绘制的几何图与文本将被填充,它画出来的是实心图

Paint.Style.STROKE:用这种风格绘制的几何图与文本将被画出外边框,它画出来的是空心图

Paint.Style.FILL_AND_STROKE:用这种风格绘制的几何图与文本将被填充并被画出外边框,从表面看它画出来的也是实心图,不过比一般画出来的实心图多了一层外边框

  • setStrokeWidth(float width):设置画笔外边框的宽度,可以想象成画笔“画出线条的宽度”
  • setXfermode(Xfermode xfermode):设置图像重叠时的处理方式
  • setShader(Shader shader):设置着色器
  • setPathEffect(PathEffect effect):设置或者清除路径效果

results matching ""

    No results matching ""